module.exports = {
  // 固定的服务与特征 UUID（16/32/128 位均可，统一转小写比较）
  serviceUUID: '',
  writeCharacteristicUUID: '',
  notifyCharacteristicUUID: '',
  //   serviceUUID: '你的服务UUID',
  //  writeCharacteristicUUID: '你的写入特征UUID',
  //  notifyCharacteristicUUID: '你的通知特征UUID',

  // 设备过滤：返回 true 表示可展示
  deviceFilter: d => {
    const name = (d.name || d.localName || '').toLowerCase();
    // 例如仅允许以 qm_ 开头的设备
    // return /^qm_/.test(name);
    return !!name;
  },

  // 配网协议类型：'json', 'binary', 'smartconfig', 'custom'
  provisionType: 'json',

  // 配网协议构建：输入 {ssid, pwd}，返回要写入的 Uint8Array 或字符串
  buildProvisionPayload: ({ ssid, pwd }) => {
    const config = this;
    
    switch (config.provisionType) {
      case 'json':
        return JSON.stringify({ 
          cmd: 'provision', 
          ssid, 
          pwd,
          timestamp: Date.now()
        });
      
      case 'binary':
        // 二进制协议示例：前4字节长度 + SSID + 密码
        const ssidBytes = new TextEncoder().encode(ssid);
        const pwdBytes = new TextEncoder().encode(pwd);
        const totalLength = 4 + ssidBytes.length + pwdBytes.length;
        const buffer = new ArrayBuffer(totalLength);
        const view = new DataView(buffer);
        
        view.setUint32(0, totalLength, false); // 大端序长度
        let offset = 4;
        
        for (let i = 0; i < ssidBytes.length; i++) {
          view.setUint8(offset + i, ssidBytes[i]);
        }
        offset += ssidBytes.length;
        
        for (let i = 0; i < pwdBytes.length; i++) {
          view.setUint8(offset + i, pwdBytes[i]);
        }
        
        return new Uint8Array(buffer);
      
      case 'smartconfig':
        // SmartConfig 协议示例
        return JSON.stringify({
          type: 'smartconfig',
          ssid: ssid,
          password: pwd,
          token: Math.random().toString(36).substr(2, 9)
        });
      
      default:
        return JSON.stringify({ cmd: 'provision', ssid, pwd });
    }
  },

  // 解析设备返回的状态消息
  parseDeviceResponse: (data) => {
    try {
      // 尝试解析为 JSON
      if (typeof data === 'string') {
        return JSON.parse(data);
      }
      
      // 如果是 ArrayBuffer，转换为字符串
      if (data instanceof ArrayBuffer) {
        const decoder = new TextDecoder();
        const text = decoder.decode(data);
        return JSON.parse(text);
      }
      
      return null;
    } catch (e) {
      console.log('解析设备响应失败:', e);
      return null;
    }
  },

  // 配网状态码定义
  statusCodes: {
    PROVISION_START: 'provision_start',
    PROVISION_SUCCESS: 'provision_success', 
    PROVISION_FAILED: 'provision_failed',
    WIFI_CONNECTING: 'wifi_connecting',
    WIFI_CONNECTED: 'wifi_connected',
    WIFI_FAILED: 'wifi_failed',
    DEVICE_READY: 'device_ready'
  }
};


